package scope;

/**
 * @Author Stringzhua
 * @Date 2024/2/29 11:28
 * description:作用域
 * 变量作用域
 */
public class varscope01 {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.cry();
        cat.eat();
        cat.hi();
    }
}

class Cat {
    //全局变量:也就是属性,作用域为整个类体 Cat类:cry eat等方法使用属性
    //属性在定义时,可以直接赋值
    int age = 10;//指定的值是10

    {
        int num = 100;
    }

     //全局变量(属性)可以不赋值,直接使用/因为存在默认值
    //局部变量必须赋值才能使用,因为没有默认值
    double weight;//也有默认值 0.0

    /*属性细节的默认值
     * int 0
     * short 0
     * byte 0
     * long 0
     * float 0.0
     * double 0.0
     * char \u0000
     * boolean false
     * String null
     * */
    //局部变量必须赋值才能使用,因为没有默认值
    public void hi() {
//        int num;
//        System.out.println("num = " + num);//报错 可能尚未初始化变量num
        int num = 1;
        String address="北京的猫";
        System.out.println("num = " + num);
        System.out.println("address = " + address);
        System.out.println("weight = " + weight);//属性
    }

    public void cry() {
        //1.局部变量一般是指在成员方法中定义的变量
        //2.n和name是局部变量
        //3.n和name的作用域只在cry方法中适用
        int n = 10;
        String name = "jack";
        System.out.println("在cry中使用age属性=" + age);
    }

    public void eat() {
        System.out.println("在eat方法中使用age属性=" + age);
//        System.out.println("num=" + num);
//        System.out.println("在eat方法中使用cry的变量name="+name);//错误
        //除了属性之外的其他变量,作用域为定义它的代码块中！
    }
}
